from typing import List
import datetime
from dto.strategy_assessment import RiskAssessment
from dto.strategy_info import StrategyInfoMetadata
from dto.strategy_stock_day import StrategyStockDay
from service.strategy.base_strategy import BaseStrategy

# 假设法定节假日是固定的，可以根据需求更新
# 示例：2024年假设的法定节假日
public_holidays = [
    datetime(2024, 10, 1),  # 2024年10月1日
    datetime(2024, 10, 2),  # 2024年10月2日
    datetime(2024, 10, 3),  # 2024年10月3日
    datetime(2024, 10, 4),  # 2024年10月4日
    datetime(2024, 10, 5),  # 2024年10月5日
]

class HolidayProximityStrategy(BaseStrategy):
    """
    判断当前时间是否在法定节假日的5天内，根据离假期的天数减分
    """

    def analyze(self, trade_info_list: List[StrategyStockDay]) -> RiskAssessment:
        """
        判断当前时间是否在法定节假日的5天内，并根据距离节假日的天数调整分数
        """
        current_date = datetime.now()
        node_point = 0
        description = ""

        # 假设我们检查最近的法定节假日
        for holiday in public_holidays:
            days_diff = (holiday - current_date).days

            # 如果当前时间在节假日前5天内
            if 0 <= days_diff <= 5:
                node_point = max(0, 5 - days_diff)  # 离假期越近，分数越低
                description = f"Current date is within {days_diff} days of a public holiday (Holiday on {holiday.strftime('%Y-%m-%d')})."
                break  # 找到最近的假期后停止检查

        return RiskAssessment(
            stock_code=trade_info_list[0].stock_code if trade_info_list else "Unknown",
            description=description,
            confif=self.strategyConfig
            node_point=node_point
        )

    def strategyConfig(self) -> dict:
        """
        返回策略配置
        """
        return StrategyInfoMetadata(
                strategy_code="HolidayProximity",
                strategy_name="Holiday Proximity Strategy",
                strategy_group=1,  # 关注型策略
                strategy_type="Holiday Proximity",
                analysis_day=5,
                strategy_level=1
            )